\chapter{Tipos de Datos Abstractos}

La idea del Tipo de Dato Abstracto o TDA (\emph{Abstract Data Type}), es desvincular el \textbf{tipo de dato} de su implementación. Es decir, que un TDA, sólo esta relacionado con el \emph{Qué hace}, con rigurosidad matemática y nó con el \emph{Cómo se hace}.

Cuando se usan TDAs para la programación, esta se divide en dos partes:

\begin{description}
   \item [Programar la interfaz], donde se hará una representación directa del TDA, declarando las operaciones para el \textbf{uso} del conjunto.
   \item [Programar una implementación], donde se escribirá el código que \textbf{implemente} las operaciones prometidas por la interfaz.
\end{description}

Por ejemplo, observe el método estático \verb|asList|, de la clase \verb|Arrays|, que devuelve una lista de enteros a partir de los parámetros de su invocación.

\begin{verbatim}
   List<Integer> l = Arrays.asList(1,3,5,7,9).
\end{verbatim}

\verb|List| es una \emph{interfaz} de la cual no se puede crear un objeto, por lo que \verb|l| estará apuntando a un objeto de una clase que implemente la interfaz \verb|List|, sin embargo, si el código se basa en el TDA, nunca será necesario averiguar el tipo específico de lista que se está usando o como este alcanza su comportamiento.

\begin{verbatim}
   boolean b = l.contains(1); //b será igual a True.
\end{verbatim}






